class Solution {
public:
    /*
    i是s中的工作指针
    j是p中工作指针
    sart指向“*”
    match在S字符串中用来匹配*
    
    while(s[i]!='\0')
    如果ij对应的字符相同或者j指向的是“？”，i++;j++;
    如果不同,并且j所指的既不是“*”也不是“？”返回false;
    如果j指向的是“*”，用star指向“*”，j指向start后一个位置.
        表示希望在s中匹配到j所指的字符;
    match++;
    i=match;
    j=star+1;
    
    */
    bool isMatch(const char *s, const char *p) {
        int star=-1;
        int match=-1;
        int i=0;
        int j=0;
        while(s[i]!='\0')
        {
            if(p[j]!='\0'&&(s[i]==p[j]||p[j]=='?'))
            {
                i++;
                j++;
            }
            else if(p[j]!='\0'&&p[j]=='*')
            {
                star=j;
                match=i;
                j=star+1;
            }else if(star!=-1)
            {
                match++;
                i=match;
                j=star+1;
            }else
                return false;
        }
        while(p[j]!='\0'&&p[j]=='*') j++; //如果p字符串的末尾有“*”直接去掉
        return p[j]=='\0';
    }
};